package com.threegold.listviewsample.slice;

import com.threegold.listview.ListView;
import com.threegold.listview.common.CommonLoadMoreView;
import com.threegold.listviewsample.ResourceTable;
import com.threegold.listviewsample.provider.CommonListItemProvider;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.utils.Color;

import java.util.ArrayList;
import java.util.List;

public class LoadMoreAbilitySlice extends AbilitySlice {

    private CommonListItemProvider itemProvider;
    private ListView listView;

    private int toIndex = 10;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_load_more);

        listView = (ListView) findComponentById(ResourceTable.Id_listView);
        // 创建适配器
        itemProvider = new CommonListItemProvider(this);
        // 使用默认的上拉加载组件
        CommonLoadMoreView commonLoadMoreView = new CommonLoadMoreView(this, listView);
        // 修改提示，进度颜色等效果
        commonLoadMoreView.setLoadingString("跑呀跑呀");
        commonLoadMoreView.setNoMoreString("我是有底线的好宝宝");
        commonLoadMoreView.getLoadingText().setTextColor(Color.RED);
        commonLoadMoreView.getProgressView().setProgressColor(Color.YELLOW);
        // 配置上拉加载
        listView.setLoadMoreView(commonLoadMoreView) // 设置上拉加载的UI组件，使用默认提供的
                .setOpenLoadMore(true) // 开启上拉加载功能
                .setOnLoadMoreListener(new ListView.OnLoadMoreListener() { // 设置上拉加载触发监听器
                    @Override
                    public void onLoadingMore() {
                        loadMoreData();
                    }
                });
        itemProvider.setDataList(getDatas(0, toIndex));
        listView.setItemProvider(itemProvider);
    }

    private void loadMoreData() {
        // 模拟网络请求
        getUITaskDispatcher().delayDispatch(new Runnable() {
            @Override
            public void run() {
                int from = toIndex;
                toIndex += 4;
                List<String> datas = getDatas(from, toIndex);
                // 获取要插入数据的长度
                int insertSize = datas.size();
                // 获取当前数据集合中数据长度
                int oldSize = itemProvider.getDataSize();
                // 添加数据到数据集合
                itemProvider.getDataList().addAll(datas);
                // 更新插入的数据
                itemProvider.notifyDataSetItemRangeInserted(oldSize, insertSize);
                // 通知加载完成
                listView.loadComplete();
                // 这里添加一个逻辑，当数据长度大于20，就你没有数据可以添加了
                if (itemProvider.getDataSize() > 20) {
                    listView.setHasMore(false);
                }
            }
        }, 1000);

    }

    private List<String> getDatas(int from, int to) {
        List<String> list = new ArrayList<>();
        for (int i = from; i < to; i++) {
            list.add("item" + i);
        }
        return list;
    }

}
